{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e17c8e10-ecd0-4ca3-863a-80aa09f8b241",
   "metadata": {},
   "source": [
    "# 词向量及向量知识库\n",
    "\n",
    "[toc]\n",
    "\n",
    "## 一、词向量\n",
    "\n",
    "### 1. 什么是词向量\n",
    "![Embeddding](../../assets/rag6.png)\n",
    "在机器学习和自然语言处理（NLP）中，词向量（Embeddings)是一种将非结构化数据，如单词、句子或者整个文档，转化为实数向量的技术。这些实数向量可以被计算机更好地理解和处理。\n",
    "\n",
    "嵌入背后的主要想法是，相似或相关的对象在嵌入空间中的距离应该很近。\n",
    "![similar](../../assets/rag7.png)\n",
    "举个例子，我们可以使用词嵌入（word embeddings)来表示文本数据。在词嵌入中，每个单词被转换为一个向量，这个向量捕获了这个单词的语义信息。例如，\"king\" 和 \"queen\" 这两个单词在嵌入空间中的位置将会非常接近，因为它们的含义相似。而 \"apple\" 和 \"orange\" 也会很接近，因为它们都是水果。而 \"king\" 和 \"apple\" 这两个单词在嵌入空间中的距离就会比较远，因为它们的含义不同。\n",
    "\n",
    "### 2. 词向量的优势\n",
    "在RAG（Retrieval Augmented Generation，检索增强生成）方面词向量的优势主要有两点：\n",
    "* 词向量比文字更适合检索。当我们在数据库检索时，如果数据库存储的是文字，主要通过检索关键词（词法搜索）等方法找到相对匹配的数据，匹配的程度是取决于关键词的数量或者是否完全匹配查询句的；但是词向量中包含了原文本的语义信息，可以通过计算问题与数据库中数据的点积、余弦距离、欧几里得距离等指标，直接获取问题与数据在语义层面上的相似度；\n",
    "* 词向量比其它媒介的综合信息能力更强，当传统数据库存储文字、声音、图像、视频等多种媒介时，很难去将上述多种媒介构建起关联与跨模态的查询方法；但是词向量却可以通过多种向量模型将多种数据映射成统一的向量形式。\n",
    "### 3. 一般构建词向量的方法\n",
    "\n",
    "在搭建 RAG 系统时，我们往往可以通过使用嵌入模型来构建词向量，我们可以选择：\n",
    "* 使用各个公司的 Embedding API；\n",
    "* 在本地使用嵌入模型将数据构建为词向量。\n",
    "\n",
    "## 二、向量数据库\n",
    "\n",
    "### 1. 什么是向量数据库\n",
    "向量数据库是用于高效计算和管理大量向量数据的解决方案。向量数据库是一种专门用于存储和检索向量数据（embedding）的数据库系统。它与传统的基于关系模型的数据库不同，它主要关注的是向量数据的特性和相似性。\n",
    "\n",
    "在向量数据库中，数据被表示为向量形式，每个向量代表一个数据项。这些向量可以是数字、文本、图像或其他类型的数据。向量数据库使用高效的索引和查询算法来加速向量数据的存储和检索过程。\n",
    "### 2. 向量数据库的原理及核心优势\n",
    "向量数据库中的数据以向量作为基本单位，对向量进行存储、处理及检索。向量数据库通过计算与目标向量的余弦距离、点积等获取与目标向量的相似度。当处理大量甚至海量的向量数据时，向量数据库索引和查询算法的效率明显高于传统数据库。\n",
    "### 3. 主流的向量数据库\n",
    "1. ‌**‌[Milvus]**‌\n",
    "   - 开源向量数据库，专为大规模相似性搜索和向量索引设计，支持多种索引类型和度量方式，适用于图像、视频识别、自然语言处理等场景。\n",
    "2. ‌**‌[Chroma DB]**‌\n",
    "   - 专为管理复杂的高维颜色数据设计，适用于数字媒体、电子商务和内容发现等场景，特别是在需要颜色相似性比较的搜索和推荐系统中表现出色。\n",
    "3. ‌**‌[Pinecone]**‌\n",
    "   - 提供全托管服务的向量数据库，简化开发和扩展向量搜索应用的复杂性，适用于需要快速精确相似性搜索的应用。\n",
    "4. ‌**‌[SingleStore Database]**‌\n",
    "   - 创新地将向量数据存储在关系型数据库表中，支持AI驱动的应用程序、聊天机器人、图像识别系统等，适用于需要高效向量处理的场景。\n",
    "5. ‌**‌[Weaviate]**‌\n",
    "   - 开源向量搜索引擎，支持向量化处理、数据分类和语义搜索，适用于语义化文本搜索和自动化数据分类。\n",
    "6. ‌**‌[Qdrant]**‌\n",
    "   - 设计用于提升性能和灵活性的开源向量搜索引擎，支持精确搜索和近似搜索，适用于需要平衡准确性和速度的场景。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dba42e86-b6e5-4cef-b950-ad62f74d6a15",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python3 (langchain-yw)",
   "language": "python",
   "name": "langchain-yw"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
